from elasticsearch import AsyncElasticsearch
from elasticsearch_dsl import Search
from datetime import datetime


async def simple_query_es_by_pagination(es_client: AsyncElasticsearch,
                                        es_index: str,
                                        page_size: int,
                                        page_num: int) -> dict:
    """
    对 ES 中某个索引中的数据进行简单查询
    可能抛出 elasticsearch.exceptions.NotFoundError，此时会交给全局异常处理器处理
    :param es_client:
    :param es_index: 所要查询的索引名
    :param page_size: 一页的大小
    :param page_num: 第几页
    :return: ES 的响应
    """
    offset = (page_num - 1) * page_size
    search = Search().query()[offset: offset + page_size].extra(track_total_hits=True)
    es_resp = await es_client.search(index=es_index, body=search.to_dict())
    return es_resp


def covert_when_from_special_format(when: str) -> str:
    """
    字段 `when` 可能是特殊格式，将他们转换成统一的时间格式
    :param when: 所要转换的 “when”
    :return: 转换后的值
    """
    if when == '今天':
        when = datetime.now().strftime(r'%Y%m%d')
    return when
